"use client"; import GlobalNotify from "@/components/ModalPopup/GlobalNotifyModal"; import { doClaimShopApi, getShopInfoApi, ShopActivityRewardItem, ShopInfo, ShopProductItem, } from "@/api/depositsApi"; import { BtnTypeEnum, BtnTypeMap, ClaimActiveErrorMap } from "@/enums"; import { useRouter } from "@/i18n/routing"; import { formatAmount } from "@/utils/index"; import { Toast } from "antd-mobile"; import clsx from "clsx"; import { useTranslations } from "next-intl"; import { useSearchParams } from "next/navigation"; import React from "react"; import "swiper/css/pagination"; import { Pagination } from "swiper/modules"; import { Swiper, SwiperClass, SwiperSlide } from "swiper/react"; import styles from "./page.module.scss"; const CardPage = () => { const router = useRouter(); const searchParams = useSearchParams(); const swiperRef = React.useRef(null); const [act, setAct] = React.useState(0); const [amount, setAmount] = React.useState({}); const [visible, setVisible] = React.useState(false); const [shopInfo, setShopInfo] = React.useState({} as ShopInfo); const [loading, setLoading] = React.useState(false); const [canClaim, setCanClaim] = React.useState([]); const shop_id = React.useMemo(() => { return Number(searchParams.get("shop_id")); }, []); const t = useTranslations(); React.useEffect(() => { getInfo(); }, []); const getInfo = async () => { if (!shop_id) { setShopInfo({} as ShopInfo); return; } try { setLoading(true); const res = await getShopInfoApi({ shop_id }); if (res?.code === 200 && res?.data?.products) { let actKey = 0; let canClaimArray: number[] = []; res.data.products.sort((a: any, b: any) => { return a.pay - b.pay; }); const result = res.data.products.map((item: ShopProductItem, idx: number) => { item.btnType = BtnTypeEnum.DISABLED; //|| item.is_suss === -1 if (item.days <= 0) { item.btnType = BtnTypeEnum.DEPOSITE; } if (item.days > 0 && item.is_suss === 0) { canClaimArray.push(idx); if (!actKey) { actKey = idx; } } if (item.days > 0 && item.is_suss === 0) { item.btnType = BtnTypeEnum.CANCLAIM; } return item; }); //自动滚动到第一个买了的商品 setTimeout(() => { if (actKey) { setAct(actKey); } swiperRef.current?.slideToLoop(actKey, 0, false); }, 100); setCanClaim(canClaimArray); setShopInfo({ ...res.data, products: result || [] }); } } finally { setLoading(false); } }; const doChange = (type: 1 | -1) => { if (swiperRef.current) { if (type === 1) swiperRef.current.slideNext(); if (type === -1) swiperRef.current.slidePrev(); } }; const redPointInfo = React.useMemo(() => { const min = Math.min(...canClaim); const max = Math.max(...canClaim); const result = { prev: false, next: false, }; if (act > min) { result.prev = true; } if (act < max) { result.next = true; } return result; }, [act]); // const data = React.useMemo(() => { // return [1, 2, 3, 4, 5]; // }, []); const getActiveInfo = (itemData: ShopProductItem) => { const amountInfo = itemData.activity_reward.find((item: ShopActivityRewardItem) => { return item.item_id === 1; }); const boundsInfo = itemData.activity_reward.find((item: ShopActivityRewardItem) => { return item.item_id === 2; }); const bounsAmount = boundsInfo?.amount || 0; const bounsValue = boundsInfo?.reward === 1 ? bounsAmount : (bounsAmount / 100) * itemData.pay_value; const amountAmount = amountInfo?.amount || 0; const amountValue = amountInfo?.reward === 1 ? amountAmount : (amountAmount / 100) * itemData.pay_value; return { amount: amountValue, amountRollover: amountInfo?.rollover || 0, bouns: bounsValue, bounsRollover: boundsInfo?.rollover || 0, }; }; const doClaim = async (itemData: ShopProductItem) => { if (!itemData.id) { Toast.show({ content: "Missing product ID" }); return; } if (itemData.btnType === BtnTypeEnum.DEPOSITE) { router.push(`/deposit?target_id=${shop_id}`); return; } if (itemData.btnType !== BtnTypeEnum.CANCLAIM) { return; } try { const res = await doClaimShopApi({ id: itemData.id, }); if (res.code === 200 && res?.data?.code === 1) { const amountObj: any = {}; if (res?.data?.reward) { res?.data?.reward.forEach((item: any) => { amountObj[`coin_${item.coin_type}`] = formatAmount(item.amount); }); } if (res?.data?.extra_reward) { res?.data?.extra_reward.forEach((item: any) => { amountObj[`coin_${item.coin_type}`] = formatAmount( new BigNumber(amountObj[`coin_${item.coin_type}`] || 0) .plus(item.amount) .toString() ); }); } setAmount(amountObj); setVisible(true); getInfo(); } else { throw new Error(ClaimActiveErrorMap.get(res.data.code) || t(`code.400`)); } } catch (error: any) { if (error) { Toast.show({ content: error.message || error.toString(), maskClickable: false, }); } } }; return (
{ swiperRef.current = swiper; }} onSlideChange={(swiper) => { setAct(swiper.realIndex); }} loop={shopInfo?.products?.length > 3 || false} modules={[Pagination]} // loopAdditionalSlides={2} pagination={{ clickable: true, }} > {!!shopInfo?.products?.length && shopInfo?.products.map((item) => { const itemInfo = getActiveInfo(item); return (
{shop_id === 4 && "CARTãO DE MêS"} {shop_id === 3 && "Cartão Semanal"}
{item.days > 0 && "Já foi comprado"}
Para Recarregar
{item.pay_value}R
EXTRA {item.desc}%
Receba por dia
Numerário
{itemInfo.amount}R
Bônus
{itemInfo.bouns}R
{shop_id === 4 ? "30" : ""} {shop_id === 3 ? "7" : ""}
dias
Receba por dia
{item.btnType === BtnTypeEnum.DEPOSITE && ( <>
Você ainda não comprou
doClaim(item)} > {BtnTypeMap.get(item.btnType)}
)} {item.btnType !== BtnTypeEnum.DEPOSITE && ( <>
NUMERÁRIO {itemInfo.amount}R
+
BÔNUS {itemInfo.bouns}R
{item.days} DIAS RESTANTES
doClaim(item)} > {item.btnType != undefined && BtnTypeMap.get( item.btnType )}
)}
); })}
doChange(-1)} > {redPointInfo.prev &&
}
doChange(1)} > {redPointInfo.next &&
}
router.push(`/cardRecord?shop_id=${shop_id}`)} > Receba sens registros>
Recarga
Receba dinheiro diariamente
Receba seu bônus diarianente
Taxa de retirada de dinheiro
Bônus retirada nultiplicação
{shopInfo?.products?.map((item) => { const itemInfo = getActiveInfo(item); return (
{item.pay_value}
{itemInfo.amount}
{itemInfo.bouns}
{itemInfo.amountRollover}
{itemInfo.bounsRollover}
); })}
Regras de Atividade
  • Recarregue no dia 1 e receba bônus + prêmios emdinheiro diariamente do mesmo dia até o dia {shop_id === 3 ? "7" : "30"}.
  • A retirada diária do prémio do cartão mensal é até às 23h30.
  • 0 cartão mensal é recolhido 1 vez por dia.
  • Reemissão automática da parte do prêmio em dinheiro seo cartão mensal não for recebido no dia, o prêmio de ourocolorido não está disponível
setVisible(false)} deraction={5000} >
); }; export default CardPage; CardPage;